package com.mexcad.servlets;


import java.io.*;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;

import javax.servlet.*;
import javax.servlet.http.*;

import com.mexcad.db.connectors.ClienteConnector;
import com.mexcad.db.delegate.DelegateConnectors;
import com.mexcad.db.dto.CatEstado;
import com.mexcad.db.dto.Cliente;

public class ArbolClientesServlet extends javax.servlet.http.HttpServlet implements javax.servlet.Servlet {
// public class ArbolSociosServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private PrintWriter out;
	private  List<Cliente> clientes;
	
	public ArbolClientesServlet() {
		super();
		this.clientes= new ArrayList();
	}   	
//			List<Categories> productos =  ProductsRPC.obtieneListadoCategorias();
	/* (non-Java-doc)
	 * @see javax.servlet.http.HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		this.doPost(request, response);
	}  	
/*
	private  TreeMap getMapaHijos(List<Cliente> clientesList){
	//List<CatEstado> estados=  DelegateConnectors.getAllEstados();
		TreeMap <Integer, List<Cliente>> mapa = new TreeMap();
		int levelCounter = ClienteConnector.getParentCount();
	
		Iterator <Cliente>it=clientesList.iterator();
		while(it.hasNext()){
			Cliente cliente = it.next();
			if(cliente.getNodoPadre()==0){
				clientes.add(cliente);
			}else{
				if(!mapa.containsKey(cliente.getNodoPadre())){
					List <Cliente>listadoClientes = new ArrayList();
					listadoClientes.add(cliente);
					mapa.put(cliente.getNodoPadre(), listadoClientes);
				}else{
					List <Cliente> listadoClientes = mapa.get(cliente.getNodoPadre());
					listadoClientes.add(cliente);
				}				
			}
		}
		
		return mapa;
	}
	*/
	private  TreeMap<Integer, List<Cliente>> getMapaHijos(List<Cliente> clientesList){
		//List<CatEstado> estados=  DelegateConnectors.getAllEstados();
		if(clientesList !=null && clientesList.size()>0){
			TreeMap <Integer, List<Cliente>> mapa = new TreeMap();
			//int levelCounter = ClienteConnector.getParentCount();
		
			Iterator <Cliente>it=clientesList.iterator();
			while(it.hasNext()){
				Cliente cliente = it.next();
				if(cliente.getNodoPadre()==0){
					clientes.add(cliente);
				}else{
					if(!mapa.containsKey(cliente.getNodoPadre())){
						List <Cliente>listadoClientes = new ArrayList();
						listadoClientes.add(cliente);
						mapa.put(cliente.getNodoPadre(), listadoClientes);
					}else{
						List <Cliente> listadoClientes = mapa.get(cliente.getNodoPadre());
						listadoClientes.add(cliente);
					}				
				}
			}
			return mapa;
		}else {
			return null;
		}
	}
	public void doPost(HttpServletRequest req, HttpServletResponse res)
	throws ServletException, IOException{

	
		String arbolSocios="[";
		//clientes=new ArrayList();
		
		clientes.clear();
		List<CatEstado> estados=  DelegateConnectors.getAllEstados();
		int numEstados= DelegateConnectors.getStateCount();
		for(int k=0;k<estados.size();++k){
			//clientes.clear();
			TreeMap <Integer, List<Cliente>>clientesHijos =  getMapaHijos(ClienteConnector.getClientesPorEstado(estados.get(k).getIdEstado()));
			if(clientesHijos != null ){
				Iterator <Cliente>it =clientes.iterator();
						
			    arbolSocios+="{\n";	
				arbolSocios+="\ttext:'"+estados.get(k).getDescEstado()+"',\n";
				arbolSocios+="\texpanded:true,\n";
				arbolSocios+="\tchildren:[\n";
				
				int i=0;	
				while(it.hasNext()){
					
					arbolSocios+="{\n";	
					Cliente cliente = it.next();
					
					arbolSocios+="\ttext:'"+cliente.getNombreCliente()+"',\n";
					arbolSocios+="\t\tid:'categorieId-"+cliente.getCkCliente().getIdCliente()+"-categorieId',\n";
					arbolSocios+="\texpanded:true,\n";
					arbolSocios+="\tchildren:[\n";
					
					List<Cliente> hijos =clientesHijos.get(cliente.getCkCliente().getIdCliente());
					if(hijos != null){
						for(int j=0;j<hijos.size();++j){
							Cliente hijo =  hijos.get(j);
							arbolSocios+="{\t\ttext:'"+hijo.getNombreCliente()+"',\n";
							arbolSocios+="\t\tid:'categorieId-"+hijo.getCkCliente().getIdCliente()+"-categorieId',\n";
							arbolSocios+="\t\tleaf:true }\n";
							if(j+1 != hijos.size())
								arbolSocios+=",\n";
						}	
					}
					arbolSocios+="\n\t]";	
					arbolSocios+="}";
					if(i+1 != clientes.size())
						arbolSocios+=",";
					i++;
					
				}//termina while
				arbolSocios+="\n\t]";	
				arbolSocios+="}";
				if(numEstados != k+1)
					arbolSocios+=",";
				
		    }//termina if
		} // temina for estados
		 arbolSocios+="]";
    //	 System.out.println(arbolSocios);

    	 
    	 
		out = res.getWriter();
		out.println(arbolSocios);
		out.close(); 
    }
	
	/*
	 public void doPost(HttpServletRequest req, HttpServletResponse res)
	throws ServletException, IOException{

		//List<CatEstado> estados=  DelegateConnectors.getAllEstados();
		String arbolSocios="[";
		clientes.clear();
		
		
		
			TreeMap <Integer, List>clientesHijos =  getMapaHijos(ClienteConnector.getAllClientes());
			Iterator <Cliente>it =clientes.iterator();
			
			
			int i=0;	
			while(it.hasNext()){
				
				arbolSocios+="{\n";	
				Cliente cliente = it.next();
				
				arbolSocios+="\ttext:'"+cliente.getNombreCliente()+"',\n";
				arbolSocios+="\texpanded:true,\n";
				arbolSocios+="\tchildren:[\n";
				
				List<Cliente> hijos =clientesHijos.get(cliente.getCkCliente().getIdCliente());	
				for(int j=0;j<hijos.size();++j){
					Cliente hijo =  hijos.get(j);
					arbolSocios+="{\t\ttext:'"+hijo.getNombreCliente()+"',\n";
					arbolSocios+="\t\tid:'categorieId-"+hijo.getCkCliente().getIdCliente()+"-categorieId',\n";
					arbolSocios+="\t\tleaf:true }\n";
					if(j+1 != hijos.size())
						arbolSocios+=",\n";
				}	
				arbolSocios+="\n\t]";	
				arbolSocios+="}";
				if(i+1 != clientes.size())
					arbolSocios+=",";
				i++;
			}
			arbolSocios+="]";
    	 System.out.println(arbolSocios);
		out = res.getWriter();
		out.println(arbolSocios);
		out.close(); 
    }
	 */
	 
}